#include <fcntl.h>		// 提供open()函数
#include <sys/types.h>	// 提供mode_t类型
#include <sys/stat.h>	// 提供open()函数的符号
#include <unistd.h>		// 提供close()函数
#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int f;	// 用于保存文件标示符
	const char* f_path = "test";
	mode_t 		f_attrib;
	struct stat* buf = malloc(sizeof(stat));

	f_attrib = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH; // umask权限控制

	f = creat(f_path, f_attrib); 	// 创建文件
	if (-1 == f)
	{
		puts("文件创建失败.");
		return 1;
	}
	else
	{
		puts("文件创建成功.");
	}

	fstat(f, buf);
	close(f);	// 关闭文件

	if (buf->st_mode & S_IRUSR)
	{
		puts("所有者拥有读权限.");
	}
	if (buf->st_mode & S_IRUSR)
	{
		puts("所有者拥有读权限.");
	}
	if (buf->st_mode & S_IRGRP)
	{
		puts("所属组拥有读权限.");
	}

	chmod(f_path, 0771);
	stat(f_path, buf);
	if (buf->st_mode & S_IXUSR)
	{
		puts("所有者拥有执行权限.");
	}
	if (buf->st_mode & S_IXGRP)
	{
		puts("所属组拥有执行权限.");
	}

	return 0;
}
